{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 03\n",
    "\n",
    "# 估算圆周率\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62bec701-7055-4905-9e00-a4e715661743",
   "metadata": {},
   "source": [
    "该代码展示了通过正多边形逐渐增加边数来逼近圆周率$\\pi$的过程。随着正多边形的边数$n$增大，内接多边形和外接多边形的周长逐渐逼近圆的周长，从而形成对$\\pi$值的上下界估计。代码使用了多边形的内接和外接关系计算出$\\pi$的近似上界和下界，并将它们在图中展示。\n",
    "\n",
    "### 代码细节\n",
    "\n",
    "1. **上下界公式**：\n",
    "   - 使用正多边形的内接周长估计$\\pi$的下界，公式为：\n",
    "     $$\n",
    "     \\pi_{\\text{lower}} = n \\cdot \\sin\\left(\\frac{\\pi}{n}\\right)\n",
    "     $$\n",
    "   - 使用正多边形的外接周长估计$\\pi$的上界，公式为：\n",
    "     $$\n",
    "     \\pi_{\\text{upper}} = n \\cdot \\tan\\left(\\frac{\\pi}{n}\\right)\n",
    "     $$\n",
    "   - 随着$n$增大，这两个值逐渐收敛于真实的$\\pi$。\n",
    "\n",
    "2. **图形展示**：\n",
    "   - 红色水平线表示真实的$\\pi$值，蓝色和绿色曲线分别代表$\\pi$的下界和上界估计值。\n",
    "   - 填充蓝色和绿色曲线之间的区域，展示了$\\pi$的估计范围随着$n$增加而逐渐缩小的现象。\n",
    "\n",
    "### 数学含义\n",
    "\n",
    "此图形展示了正多边形的周长如何随着边数趋向无穷大而逼近圆的周长，即：\n",
    "\n",
    "$$\n",
    "\\lim_{n \\to \\infty} n \\cdot \\sin\\left(\\frac{\\pi}{n}\\right) = \\pi\n",
    "$$\n",
    "\n",
    "该过程表明，通过增大正多边形的边数，可以逐渐逼近圆的几何性质，从而得到圆周率$\\pi$的近似值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6c7ad21-6168-42c4-879d-ca1066ec0e73",
   "metadata": {},
   "source": [
    "## 绘制多边形边数对$\\pi$估计的上界和下界的图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "fb5bcfc0-1198-41e1-b3f3-502d8d1988b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "32385e3e-73f0-44d0-bbd9-0ebb8a20bcfc",
   "metadata": {},
   "outputs": [],
   "source": [
    "n_start = 6  # 多边形起始边数\n",
    "n_stop = 50  # 多边形结束边数\n",
    "\n",
    "n_array = np.linspace(n_start, n_stop, n_stop - n_start + 1)  # 生成边数数组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7df75e0d-308d-46dc-98f7-1939bf824f20",
   "metadata": {},
   "outputs": [],
   "source": [
    "pi_lower_b = np.sin(np.pi / n_array) * n_array  # 估计$\\pi$的下界\n",
    "pi_upper_b = np.tan(np.pi / n_array) * n_array  # 估计$\\pi$的上界"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b1ff73a9-9378-4c6e-8107-29592d17d654",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(42.597222222222214, 0.5, 'Estimate of $\\\\pi$')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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1yjfCQAAQk9ts5DldxQr83q9mj17tgoLC5WamlqrY1auXKnvvvtOZ5111hH3cbvdysvLqzI1RZeV31V8M32WfKbP4moAAECoC4qgmJ6erpiYGDmdTo0fP15z5sxRz549j3pMUlKSnE6nBg4cqFtuuUU33njjEfedNm2a4uLiAlNycnJ9/whBYUSXUYoJi9WOvG36eutCq8sBAAAhLiiCYo8ePbRq1SotWbJEN998s8aOHau1a9ce9Zhvv/1Wy5cv1wsvvKCnnnpKb7/99hH3nTx5snJzcwNTRkZGff8IQSEqLFrnd7tEkvTqj3RqAQAAv01QtlEcOnSounbtqhdffLFW+z/44IN64403tH79+lrt31TbKErS8szvdcWccxXliNaeOzIV64xttO8GAAChISTbKFYwTVNut7vB9m/KBrQbpM5x3VTkKdRbq9+1uhwAABDCLA+KU6ZM0bfffqtt27YpPT1d99xzj+bPn69rrvGPCzh58mSNGTMmsP+zzz6rTz75RBs3btTGjRs1c+ZMPfbYY7r22mut+hGCimEYgaFyZv30mrXFAACAkOawuoC9e/dq9OjRyszMVFxcnPr27au0tDQNGzZMkpSZmakdO3YE9vf5fJo8ebK2bt0qh8Ohrl27avr06brpppus+hGCzu+7X60nlt6v73d9q437N+u4Vl2tLgkAAISgoGyj2NCachvFCmM+vlCLdn6lu1Lv0cPDH2z07wcAAMErpNso4re77ITRkqS3fn5DXp/X4moAAEAoIig2UcNTLlRseJx25u/QvM3fWF0OAAAIQQTFJirCEanfdbtMkjRz5WvWFgMAAEISQbEJu+x4/+Pnjzd+oNySXIurAQAAoYag2IT1TzhZXVv0UImnWG+u/q/V5QAAgBBTp6D4r3/9S2VlZfVdC+pZ5TEVX1vFK/0AAMCxqVNQnDBhgj799FPt27ev2rZFixb95qJQf37f4yrZDJuWZX6vdfs2WF0OAAAIIXUKiqZp6sorr1S7du3Url07DR8+XHfccYeeeeYZjRo1qr5rxG+QEJ2oM5KHSpJe+fFVi6sBAAChpM5tFLds2aIVK1bo4YcfVq9evbRixQo99thjOu200+qzPtSDik4tb//8H3m8jT/4NwAACE11ejOLzWbTnj171LZt24aoqcE1hzezVOb2lGjQrK7KdR/Up1el6YLuIyyt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iFuxYoWysrI0YMAAORwOORwOLViwQE8//bQcDkfgGnJ9Q190dLT69OmjjRs3BuXfW4IijiolJUXt2rXTvHnzAutKS0u1YMECDR482MLKUBumaerWW2/VBx98oK+//lopKSlVtnN9mx7TNOV2u7m2Ie7cc89Venq6Vq1aFZgGDhyoa665RqtWrVKXLl24vk2E2+3WunXr1L59+6D8e8ujZ6igoECbNm0KLG/dulWrVq1SfHy8OnbsqIkTJ+qhhx7Scccdp+OOO04PPfSQoqKidPXVV1tYNWrjlltu0VtvvaWPPvpIsbGxgf9KjYuLU2RkZGBcNq5vaJoyZYpGjhyp5ORk5efna/bs2Zo/f77S0tK4tiEuNjY20Ja4QnR0tFq1ahVYz/UNTXfccYcuvPBCdezYUVlZWXrwwQeVl5ensWPHBuffW0v6WiOofPPNN6akatPYsWNN0/R31586darZrl070+l0mmeeeaaZnp5ubdGolZquqyRz5syZgX24vqHrhhtuMDt16mSGh4ebbdq0Mc8991zziy++CGzn2jYtlYfHMU2ub6i68sorzfbt25thYWFmYmKieckll5hr1qwJbA+262qYpmlaE1EBAAAQzGijCAAAgBoRFAEAAFAjgiIAAABqRFAEAABAjQiKAAAAqBFBEQAAADUiKAIAAKBGBEUAAADUiKAIoFnatm2bDMPQqlWrrC4l4JdfftGgQYMUERGh/v37H/Px1113nS6++OKj7nP22Wdr4sSJdaoPQPNDUARgieuuu06GYWj69OlV1n/44YcyDMOiqqw1depURUdHa/369frqq6+O+fgZM2botddeq//CADRbBEUAlomIiNDDDz+sgwcPWl1KvSktLa3zsZs3b9bpp5+uTp06qVWrVsd8fFxcnFq0aFHn7weAwxEUAVhm6NChateunaZNm3bEfe67775qj2Gfeuopde7cObBc8cj1oYceUkJCglq0aKH7779fHo9Hd955p+Lj45WUlKRXX3212vl/+eUXDR48WBEREerVq5fmz59fZfvatWt1/vnnKyYmRgkJCRo9erSys7MD288++2zdeuutmjRpklq3bq1hw4bV+HP4fD498MADSkpKktPpVP/+/ZWWlhbYbhiGVqxYoQceeECGYei+++6r8Tzvvfee+vTpo8jISLVq1UpDhw5VYWFhld9DhcLCQo0ZM0YxMTFq3769Hn/88WrnKy0t1V133aUOHTooOjpap556apXfwfbt23XhhReqZcuWio6OVq9evfTZZ5/VWFtNKq7fG2+8oc6dOysuLk5/+MMflJ+fX+tzALAOQRGAZex2ux566CE988wz2rlz528619dff63du3dr4cKFeuKJJ3Tffffpd7/7nVq2bKmlS5dq/PjxGj9+vDIyMqocd+edd+r222/XypUrNXjwYF100UXav3+/JCkzM1NnnXWW+vfvr+XLlystLU179+7VFVdcUeUcs2bNksPh0OLFi/Xiiy/WWN+MGTP0+OOP67HHHtPq1as1YsQIXXTRRdq4cWPgu3r16qXbb79dmZmZuuOOO6qdIzMzU1dddZVuuOEGrVu3TvPnz9cll1wi0zRr/M4777xT33zzjebMmaMvvvhC8+fP14oVK6rsc/3112vx4sWaPXu2Vq9ercsvv1znnXdeoK5bbrlFbrdbCxcuVHp6uh5++GHFxMTU4oocsnnzZn344Yf69NNP9emnn2rBggXVmhwACFImAFhg7Nix5qhRo0zTNM1BgwaZN9xwg2mapjlnzhyz8v81TZ061ezXr1+VY5988kmzU6dOVc7VqVMn0+v1Btb16NHDPOOMMwLLHo/HjI6ONt9++23TNE1z69atpiRz+vTpgX3KysrMpKQk8+GHHzZN0zT/7//+zxw+fHiV787IyDAlmevXrzdN0zTPOusss3///r/68yYmJpr//Oc/q6w7+eSTzT//+c+B5X79+plTp0494jlWrFhhSjK3bdtW4/bKv9P8/HwzPDzcnD17dmD7/v37zcjISHPChAmmaZrmpk2bTMMwzF27dlU5z7nnnmtOnjzZNE3T7NOnj3nffff96s93JFOnTjWjoqLMvLy8wLo777zTPPXUU+t8TgCNx2FtTAUA6eGHH9aQIUN0++231/kcvXr1ks126CFJQkKCevfuHVi22+1q1aqVsrKyqhyXmpoa+OxwODRw4ECtW7dOkrRixQp98803Nd5B27x5s7p37y5JGjhw4FFry8vL0+7du3XaaadVWX/aaafpp59+quVPKPXr10/nnnuu+vTpoxEjRmj48OG67LLL1LJlyxrrKy0trfLzxcfHq0ePHoHlH3/8UaZpBn6OCm63O9BG8rbbbtPNN9+sL774QkOHDtWll16qvn371rpmSercubNiY2MDy+3bt692HQAEJx49A7DcmWeeqREjRmjKlCnVttlstmqPVsvKyqrtFxYWVmXZMIwa1/l8vl+tp6LXtc/n04UXXqhVq1ZVmTZu3KgzzzwzsH90dPSvnrPyeSuYpnlMPbztdrvmzZunuXPnqmfPnnrmmWfUo0cPbd26tdq+h//OauLz+WS327VixYoqP9+6des0Y8YMSdKNN96oLVu2aPTo0UpPT9fAgQP1zDPP1LpmqeZrU5vrAMB6BEUAQWH69On65JNP9N1331VZ36ZNG+3Zs6dK8KnPsQ+XLFkS+OzxeLRixQodf/zxkqSTTjpJa9asUefOndWtW7cqU23DoSS5XC4lJiZq0aJFVdZ/9913OuGEE46pXsMwdNppp+n+++/XypUrFR4erjlz5lTbr1u3bgoLC6vy8x08eFAbNmwILJ944onyer3Kysqq9vO1a9cusF9ycrLGjx+vDz74QLfffrtefvnlY6oZQOji0TOAoNCnTx9dc8011e5WnX322dq3b58eeeQRXXbZZUpLS9PcuXPlcrnq5XufffZZHXfccTrhhBP05JNP6uDBg7rhhhsk+TtyvPzyy7rqqqt05513qnXr1tq0aZNmz56tl19+WXa7vdbfc+edd2rq1Knq2rWr+vfvr5kzZ2rVqlV68803a32OpUuX6quvvtLw4cPVtm1bLV26VPv27asxbMbExGjcuHG688471apVKyUkJOiee+6p8ni+e/fuuuaaazRmzBg9/vjjOvHEE5Wdna2vv/5affr00fnnn6+JEydq5MiR6t69uw4ePKivv/76mMMtgNDFHUUAQeMf//hHtUemJ5xwgp577jk9++yz6tevn3744YcaewTX1fTp0/Xwww+rX79++vbbb/XRRx+pdevWkqTExEQtXrxYXq9XI0aMUO/evTVhwgTFxcVVCVy1cdttt+n222/X7bffrj59+igtLU0ff/yxjjvuuFqfw+VyaeHChTr//PPVvXt33XvvvXr88cc1cuTIGvd/9NFHdeaZZ+qiiy7S0KFDdfrpp2vAgAFV9pk5c6bGjBmj22+/XT169NBFF12kpUuXKjk5WZLk9Xp1yy236IQTTtB5552nHj166Lnnngsc37lz5yMO5QMg9BlmbRqyAABwmOLiYsXHx+uzzz7TOeecY3U5ABoAdxQBAHWyYMECDRkyhJAINGHcUQQAAECNuKMIAACAGhEUAQAAUCOCIgAAAGpEUAQAAECNCIoAAACoEUERAAAANSIoAgAAoEYERQAAANSIoAgAAIAa/T/t6FTR3DwPGQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "\n",
    "plt.axhline(y=np.pi, color='r', linestyle='-')  # 绘制真实$\\pi$值的参考线\n",
    "plt.plot(n_array, pi_lower_b, color='b')  # 绘制$\\pi$下界曲线\n",
    "plt.plot(n_array, pi_upper_b, color='g')  # 绘制$\\pi$上界曲线\n",
    "plt.fill_between(n_array, pi_lower_b, pi_upper_b, color='#DEEAF6')  # 填充上界和下界之间的区域\n",
    "plt.tight_layout()\n",
    "plt.xlabel(r'Number of sides, n')  # x轴标签\n",
    "plt.ylabel(r'Estimate of $\\pi$')  # y轴标签"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
